import argparse

def parse_args():
    parser = argparse.ArgumentParser(description='Train Video-based Re-ID',formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('--lr',type=float,default=0.0003,help='learning rate')
    parser.add_argument('--lr_step_size',type=int,default=200,help='step size of lr')
    parser.add_argument('--class_per_batch',type=int,default=16)
    parser.add_argument('--track_per_class',type=int,default=4)
    parser.add_argument('--batch_size',type=int,default=128)
    parser.add_argument('--n_epochs',type=int,default=800)
    parser.add_argument('--num_workers',type=int,default=16)
    parser.add_argument('--S',type=int,default=8)
    parser.add_argument('--latent_dim',type=int,default=4096,help='')
    parser.add_argument('--load_ckpt',type=str,default=None)
    parser.add_argument('--log_path',type=str,default='loss.txt')
    parser.add_argument('--ckpt',type=str,default=None)
    parser.add_argument('--optimizer',type=str,default='adam')
    parser.add_argument('--resume_validation',type=bool,default=False)
    parser.add_argument('--model_type',type=str,default='resnet50')
    parser.add_argument('--stride',type=int,default=1)
    parser.add_argument('--temporal',default='mean')
    parser.add_argument('--frame_id_loss',action='store_true',default=False)
    parser.add_argument('--track_id_loss',action='store_true',default=True)
    parser.add_argument('--non_layers',type=int, nargs='+')
    parser.add_argument('--stripes',type=int, nargs='+')
    parser.add_argument('--gpu_devices', default='0,1', type=str, help='gpu device ids for CUDA_VISIBLE_DEVICES')
    parser.add_argument('--checkpoint_name', default='resnet50', type=str, help='model checkpoint name')
    parser.add_argument('--dataset', default='mars',type=str, help='using which dataset')
    parser.add_argument('--server', default='datacenter',type=str, help='choose dataset location')
    parser.add_argument('--h',type=int,default=256)
    parser.add_argument('--w',type=int,default=128)
    parser.add_argument('--eval_step',type=int,default=20)
    parser.add_argument('--layer_num',type=int,default=3)
    parser.add_argument('--tlayer_num',type=int,default=2)
    parser.add_argument('--gcn_num',type=int,default=8)
    parser.add_argument('--spatch_num',type=int,default=4)
    parser.add_argument('--tpatch_num',type=int,default=4)
    parser.add_argument('--graph_arch',type=str,default='plain')
    parser.add_argument('--g_feat',type=int,default=256)
    parser.add_argument('--g_pool',type=str,default='max')
    parser.add_argument('--seed',type=int,default=1,help='manual sedd')
    parser.add_argument('--dp',type=float,default=0)
    parser.add_argument('--weight_decay',type=float,default=0.0005)
    parser.add_argument('--softmax_w',type=float,default=1)
    parser.add_argument('--triplet_w',type=float,default=1)
    parser.add_argument('--gamma',type=float,default=0.1)
    parser.add_argument('--milestones', nargs='+', type=int)
    parser.add_argument('--eval_list', nargs='+', type=int)
    parser.add_argument('--multi_step',action='store_true',default=False)
    parser.add_argument('--bn_loc',type=str,default='before')
    parser.add_argument('--tran',action='store_true',default=False,help='transfrom f and gcn feat to same feature space')
    parser.add_argument('--use_batch',action='store_true',default=True)
    parser.add_argument('--xavier_uniform_bias',action='store_true',default=True)
    parser.add_argument('--dis_func',type=str,default='eu')
    parser.add_argument('--loss_type',type=str,default='split')
    parser.add_argument('--acctivate_func',type=str,default='leakyrelu')
    parser.add_argument('--aug',type=str,default='orig')
    parser.add_argument('--loss',type=str,default='orig')
    parser.add_argument('--label_smooth',action='store_true',help="whether label smooth")
    parser.add_argument('--margin',type=float,default=0.3)
    parser.add_argument('--share_type',type=str,default='avgpool')
    parser.add_argument('--down',action='store_true',help="down dim for t gcn")
    parser.add_argument('--asym',action='store_true',help="asym  tran  for gcn")
    parser.add_argument('--sole',action='store_true',help="test sole feature")
    parser.add_argument('--feat_idx',type=int,default=0)
    parser.add_argument('--use_npz',action='store_true',help="using npz")
    parser.add_argument('--fus_t',action='store_true',help="using fc fuse tGCN feature among frames")
    parser.add_argument('--gnorm',type=str,default='pow')
    parser.add_argument('--fusion_type',type=str,default='concat',help="fusion")
    parser.add_argument('--p',type=float,default=0.3,help="RandomResizedCrop  probability")
    parser.add_argument('--gcn_hpm',action='store_true',help="use hpm method to split patch")
    parser.add_argument('--hpm_patchs', nargs='+', type=int)
    parser.add_argument('--mode',type=str,default='PN-SCS')
    parser.add_argument('--scale',type=float,default=1.0)
  
    # parser.add_argument(
    args = parser.parse_args()

    return args
